/***********************************************************************************************************************
 * ############################################# Application AdewebLite #############################################
 * AdewebLite Android est une application permettant de consulter des emplois du temps fournis par l'université UHP
 * avec ou sans connexion internet (informations gardées en mémoire à chaque synchronisation). Et utilisant la web
 * API ADE pour collecter les données.
 * @author Andrianjafintrimo Victor, Zanette Sébastien
 * 
 * Basée sur l'application du même nom, utilisant le flux RSS (données à traiter), de :
 * @author Schnell Michaël, Zanette Sébastien
 * **********************************************************************************************************************
 */

package ade.screen.schedule.parameters;

import ade.main.R;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import java.util.ArrayList;

/**
 * Champ 'Période' du formulaire de création/modification d'un emploi du temps.
 * @author Seb
 */
public class SchedulePeriod extends  ParameterType {

	public static final String FIELD_ID = "period" ;

	private String period;
	private LayoutInflater inflater;

        private Spinner daySchedule;
        private ArrayList<Integer> correspondance;

        /**
         * Constructeur.
         * @param inflater
         * @param period 
         */
	public SchedulePeriod (LayoutInflater inflater, String period) {
		super(FIELD_ID) ;
		this.inflater = inflater ;
		this.period = period;
                this.initCorrespondance();
	}

        /**
         * Retourne la valeur associé à la période choisie par l'utilisateur.
         * @param view Vue
         * @return valeur associé à la période choisie par l'utilisateur
         */
	public Object getValue(View view) {
            this.daySchedule = (Spinner) view.findViewById(R.id.spinner);
            Integer value = 0 ;
            try {
                    value = this.getPeriodWithPosition(this.daySchedule.getSelectedItemPosition());
            } catch (NumberFormatException e) {} ;
            return value ;
	}

         /**
         * Retourne la vue du champ 'Période' (Liste déroulante).
         * @param convertView vue du champ dans le formulaire de création/modification
         * @param parent Vue parente
         * @return vue du champ 'Période'
         */
	public View getView(View convertView, ViewGroup parent) {
            convertView = inflater.inflate(R.layout.type_schedule_period, null);

            this.daySchedule = (Spinner) convertView.findViewById(R.id.spinner);
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(convertView.getContext(), R.array.period_array, android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            this.daySchedule.setAdapter(adapter);

            if (!this.period.equals(""))
                this.daySchedule.setSelection(this.getPositionWithPeriod(Integer.parseInt(this.period)));
            else
                this.daySchedule.setSelection(0);
            return convertView;
	} 
        
        /**
         * Initialise la liste de correspondance Texte -> Période
         * 1 semaine = 7
         * 2 semaines = 14
         * 3 semaines = 21
         * 1 mois = 28
         */
        public void initCorrespondance() {
            this.correspondance = new ArrayList<Integer>();
            this.correspondance.add(7); //1 semaine
            this.correspondance.add(14); //2 semaines
            this.correspondance.add(21); //3 semaines
            this.correspondance.add(28); //1 mois
        }
        
        /**
         * Récupère l'index de la période dans la liste.
         * @param period Période
         * @return l'index de la période
         */
        public int getPositionWithPeriod(int period) {
            return this.correspondance.indexOf(period);
        }
        
        /**
         * Récupère la période avec son index dans la liste.
         * @param position index de l'item selectionné dans le spinner
         * @return la période associé à l'item selectionné dans le spinner
         */
        public int getPeriodWithPosition(int position) {
            return this.correspondance.get(position);
        }

}
